#!/usr/bin/env python3
#coding:utf-8

__author__ = 'xmxoxo'

import sys


"""
做算法题了：（xmxoxo 2018.12.28)
有一个圆桌，坐了N个人，编号为1-N，从1号开始报数，报到M号的人离开，然后接着从M开始报，剩下最后一个人为几号？

思路：
建一个类来模拟圆桌；用一个List来保存数据；初始化时：给所有人编上号；
给出一个当前位置指针的属性来表示数到谁了；
给出一个方法来移动指针，移动时要判断下超过了List的边界要折回；
"""

class dtable():
    #初始化
    def __init__(self,n):
        self.lstTable = []
        self.lstTable = [i for i in range(1,n+1)]
    #加一个方法，在初始化后可以修改人数
    def setman(self,n):
        self.lstTable = [i for i in range(1,n+1)]
        return 1
    #开始数人的方法，返回出来的人的顺序
    def begin(self,m):
        #搞个队伍，站被叫到号的人
        lstRet = []
        #开始，要复制一张桌子
        mytable = self.lstTable.copy()
        pos = 0
        mans = len(mytable)
        while mans > 1:
            #开始数, Tip:这个循环可以优化
            t = 1 
            
            #while t < m:
            #    print ('t=%d, pos= %d ,  man = %d' % (t,pos , mytable[pos]+1))
            #    t += 1
            #    pos += 1
            #    if pos >= len(mytable):
            #        pos = 0

            #优化直接mod
            pos = (pos + m -1 ) % mans #len(mytable)
            #print(pos)
            #if pos == 0 : pos = len(mytable)-1
            #数完到谁
            p = mytable[pos]
            #print(pos,p)
            #谁出去
            mytable.remove (p)
            #站到结果队伍中去，
            lstRet.append(p)
            #判断是不是结束了
            #print(mytable)
            mans -= 1

            #if mans==1:
            #    break;
            #print('-'*30)
        #最后一个人站到结果队中
        lstRet.append(mytable[0])
        #返回结果队
        return lstRet

#开始测试 
#创建一个12人的桌
table1 = dtable(12)

#数到5的出来，输出结果
print("12,5:")
print(table1.begin(5))

#数到2的出来，会是怎样的结果呢？
print("12,2:")
print(table1.begin(2))

#换成数到7的出来
print("12,7:")
print(table1.begin(7))

#换成18人桌
table1.setman(18)
#数到6的出来
print("18,6:")
print(table1.begin(6))
        